package org.groupg.practice;

import cn.hutool.core.io.resource.ResourceUtil;
import org.jpmml.evaluator.*;

import java.io.File;
import java.util.LinkedHashMap;
import java.util.Map;

public class PmmlPredictor {

    public static void main(String[] args) throws Exception {
        // 1. 加载模型（新版推荐LoadingModelEvaluatorBuilder）

        Evaluator evaluator = new LoadingModelEvaluatorBuilder()
                .load(ResourceUtil.getStream("iris_classifier.pmml"))
                .build();
        evaluator.verify(); // 模型验证

        // 2. 准备输入数据
        // 验证鸢尾花模型
        Map<String, Object> input = Map.of(
                "sepal_length", 5.1,
                "sepal_width", 3.5,
                "petal_length", 1.4,
                "petal_width", 0.2
        );
        // 3. 执行预测
        Map<String, ?> results = evaluate(evaluator, input);

        // 4. 解析输出
        System.out.println("预测结果: " + results.get("predicted_species"));
    }

    private static Map<String, ?> evaluate(Evaluator evaluator, Map<String, Object> input) {
        // 新版简化：直接使用字段名而非FieldName
        Map<String, FieldValue> arguments = new LinkedHashMap<>();
        for (InputField field : evaluator.getInputFields()) {
            String name = field.getName(); // 直接获取字符串字段名
            arguments.put(name, field.prepare(input.get(name)));
        }

        // 执行评估
        Map<String, ?> resultMap = evaluator.evaluate(arguments);

        // 转换输出为易读格式
        return EvaluatorUtil.decodeAll(resultMap);
    }
}